package com.zhoukx.nio.zerocopy;

import java.io.FileInputStream;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.channels.FileChannel;
import java.nio.channels.SocketChannel;

/**
 *    零拷贝  客户端
 */
public class NewIoClient {

    public static void main(String[] args) throws IOException {


        SocketChannel socketChannel = SocketChannel.open();

        // 连接服务器端
        socketChannel.connect(new InetSocketAddress("127.0.0.1",7001));

        String fileName = "F:\\Netty\\尚硅谷韩顺平Netty核心技术教程\\尚硅谷 韩顺平 Netty教程（视频+源码）先保存到自己的微云里再下载\\尚硅谷Netty笔记源码资料\\资料\\protoc-3.6.1-win32.zip";

        // 得到一个文件的channel
        FileChannel fileChannel = new FileInputStream(fileName).getChannel();

        // 准备发送
        long startTimes = System.currentTimeMillis();

        // 在linux下有一个transferTo方法可以完成传输
        // 在window下一次调用transferTo 只能发送8m,就需要分段传输
        // transferTo 底层用的零拷贝
        long l = fileChannel.transferTo(0, fileChannel.size(), socketChannel);

        System.out.println("发送总字节数： " + l + ", 耗时： " + (System.currentTimeMillis() - startTimes));

        fileChannel.close();
    }
}

